<template>
	<view :class="['qn-page-' + theme]">
		<view class="tabs-view" v-if="tlist.length">
			<u-tabs
				height="70"
				inactive-color="#2A2A2A"
				:active-color="primaryColor"
				:bar-style="{ borderRadius: '0', height: '4rpx', backgroundColor: primaryColor }"
				:list="tlist"
				name="title"
				font-size="28"
				:is-scroll="true"
				:current="cate_current"
				@change="cateChange($event)"
			></u-tabs>
		</view>
		<view class="clearfix main-cont" :style="mainStyle">
			<view class="float_left">
				<scroll-view scroll-y class="left-aside">
					<view class="f-item ellipsis" :class="{ active: one_id === 'collection' }" @click="tabtap({ id: 'collection', title: '常购清单' }, 0)">
						<view v-if="one_id === 'collection'" class="active-line primary-bg"></view>
						常购清单
					</view>
					<view v-for="(item, index) in flist" :key="index" class="f-item ellipsis" :class="{ active: item.id === one_id }" @click="tabtap(item, 1)">
						<view v-if="item.id === one_id" class="active-line ellipsis"></view>
						{{ item.title }}
					</view>
				</scroll-view>
			</view>
			<view class="float_right">
				<view class="search-view">
					<view class="search-li" @click="changeSearch('zh')">综合</view>
					<view class="search-li" @click="changeSearch('xl')">
						销量
						<view class="arrow-icon arrow-up"><u-icon name="arrow-up-fill" :color="sortt === 1 ? primaryColor : '#6c6c6c'" size="10"></u-icon></view>
						<view class="arrow-icon arrow-down"><u-icon name="arrow-down-fill" :color="sortt === 2 ? primaryColor : '#6c6c6c'" size="10"></u-icon></view>
					</view>
					<view class="search-li" @click="openKey('show_brand')">
						<text style="margin-right: 10rpx;">品牌</text>
						<u-icon color="#6c6c6c" name="arrow-down" size="20"></u-icon>
					</view>
					<view class="search-li" @click="openKey('show_support')">
						<text style="margin-right: 10rpx;">其他</text>
						<u-icon color="#6c6c6c" name="arrow-down" size="20"></u-icon>
					</view>
				</view>
				<!-- 品牌选择 -->
				<view class="cate-down-view" v-if="show_brand">
					<view class="search-pop">
						<view class="head-view clearfix">
							<text class="float_left">商品品牌</text>
							<view class="float_right" @click.stop="closeKey('show_brand')"><u-icon color="#8f8f8f" size="28" name="arrow-down"></u-icon></view>
						</view>
						<view class="cate-cont">
							<block v-for="(item, index) in brand_list" :key="index">
								<view class="cate-li ellipsis" :class="[brandId_zc.indexOf(item.id) > -1 ? 'primary-btn-pain' : '']" @click.stop="brandChange(item.id)">
									{{ item.title }}
								</view>
							</block>
						</view>
						<view class="btn-ul">
							<view class="btn-li primary-btn-pain" @click="resetBrand">重置</view>
							<view class="btn-li primary-bg" @click="confirmBrand">确认</view>
						</view>
					</view>
				</view>
				<!-- 商品服务选择 -->
				<view class="cate-down-view" v-if="show_support">
					<view class="search-pop">
						<view class="head-view clearfix">
							<text class="float_left">商品服务</text>
							<view class="float_right" @click.stop="closeKey('show_support')"><u-icon color="#8f8f8f" size="28" name="arrow-down"></u-icon></view>
						</view>
						<view class="cate-cont">
							<block v-for="(item, index) in support_list" :key="index">
								<view class="cate-li ellipsis" :class="[supplier_zc.indexOf(item.id) > -1 ? 'primary-btn-pain' : '']" @click.stop="supportChange(item.id)">
									{{ item.servicesName }}
								</view>
							</block>
						</view>
						<view class="btn-ul">
							<view class="btn-li primary-btn-pain" @click="resetSupport">重置</view>
							<view class="btn-li primary-bg" @click="confirmSupport">确认</view>
						</view>
					</view>
				</view>
				<!-- 三级下拉菜单 -->
				<view class="cate-down-view" @click="changeThreeCate(false)" v-if="show_cate">
					<view @click.stop="changeThreeCate(true)">
						<view class="head-view clearfix">
							<text class="float_left">{{ two_cate }}</text>
							<view class="float_right" @click.stop="changeThreeCate(false)"><u-icon color="#8f8f8f" size="28" name="arrow-down"></u-icon></view>
						</view>
						<view class="cate-cont">
							<view
								v-for="(item, index) in three_cate"
								:key="index"
								class="cate-li"
								:class="[three_id === item.id ? 'primary-btn-pain' : '']"
								@click.stop="threeCateChange(item)"
							>
								{{ item.title }}
							</view>
						</view>
					</view>
				</view>
				<view class="right-aside clearfix">
					<view class="three-cate" v-if="three_cate.length">
						<scroll-view :scroll-x="true" class="three-cate-scroll">
							<view
								v-for="(item, index) in three_cate"
								:key="index"
								:class="[three_id === item.id ? 'primary-btn-pain' : '']"
								class="cate-li"
								@click="threeCateChange(item)"
							>
								{{ item.title }}
							</view>
						</scroll-view>
						<view class="down-btn" @click="changeThreeCate(true)"><u-icon color="#8f8f8f" size="28" name="arrow-down"></u-icon></view>
					</view>

					<!-- 循环item出来为对象 -->
					<scroll-view
						class="right-aside-scroll"
						:style="goodsScrollHeight"
						scroll-y
						lower-threshold="100px"
						@scrolltolower="lower"
						v-if="shoppingList.length > 0"
						:scroll-top="scroll_top_num"
					>
						<view class="goods-li" v-for="(item, index) in shoppingList" :key="index">
							<GoodsItem :isList="true" :item="item" @addCart="addCard(item.id)"></GoodsItem>
						</view>
						<u-loadmore margin-top="20" v-if="shoppingList.length" :status="loading_status" />
					</scroll-view>
					<Aempty text="没有商品" :src="imgHost + '/statics/search.png'" v-else></Aempty>
				</view>
			</view>
			<AddCardModel :selAddress="selAddressD" @close="cardModelPopChange" :isShow="is_add_show" :goodsId="goods_id" />
		</view>
	</view>
</template>

<script>
import GoodsItem from '@/components/GoodsItem.vue';
import Login from '@/components/Login.vue';

import AddCardModel from '@/components/AddCardModel';
import webUrl from '@/config.js';
export default {
	components: {
		AddCardModel,
		GoodsItem,
		Login
	},

	data() {
		return {
			imgHost : webUrl.QN_URL,
			show_support: false,
			show_brand: false,
			show_cate: false,
			cate_current: 0,
			is_add_show: false,
			goods_id: 0,
			loading_status: 'loadmore',
			isShow: false,
			scroll_top_num: 0,
			sizeCalcState: false,
			tabScrollTop: 0,
			currentId: 1,
			flist: [],
			slist: [],
			shoppingList: [],
			tlist: [],
			priceInfo: [],
			before_cartNum: 0,
			page: 1,
			pageSize: 10,
			pageTotal: 0,
			selAddressD: {},
			three_cate: [],
			two_cate: '',
			three_id: 0,
			one_id: 0,
			brandId_zc: [],
			brand_list: [], // 商品品牌列表
			support_list: [], // 商品服务列表
			supplier_zc: [],
			support: [], //商品服务
			brandId: [], // 品牌多选
			// sort 是js保留字段，所以定义为 sortt
			sortt: '' // 销量 1是从大到小，2是从小到大, 默认不传
		};
	},
	props: {
		isLogin: {
			type: Boolean,
			default: true
		},
		selAddress: {
			type: Object,
			default: () => {
				return {};
			}
		}
	},
	computed: {
		cartNum() {
			return this.$store.state.cartNum;
		},
		// 判断手机是否有刘海
		isBang() {
			return this.$_utils.modelmes();
		},
		mainStyle() {
			return `paddingTop: ${this.tlist.length > 0 ? '0' : '12rpx'};height: calc(100vh - 112rpx - ${this.isBang ? '84px' : '50px'} - ${
				this.tlist.length > 0 ? '80rpx' : '0rpx'
			})`;
		},
		goodsScrollHeight() {
			return `height:${this.three_cate.length ? 'calc(100% - 62rpx - 90rpx)' : 'calc(100% - 62rpx)'}`;
		},
		userId() {
			return this.$store.state.userStatus.id;
		}
	},
	watch: {
		selAddress(val) {
			this.selAddressD = val;
		},
		'$store.state.locationObj'(val) {
			if (JSON.stringify(val) === '{}') {
				return;
			}
			this.shoppingList = [];
			this.pageSize = 10;
			this.getGoodsByCategory();
		},
		async isLogin(Nval) {
			this.tlist = [];
			if (Nval) {
				this.shoppingList = [];
				this.pageSize = 10;
				await this.getAllCategory();
				await this.getGoodsByCategory();
			}
		}
	},
	async created() {
		await this.getAllCategory();
		await this.getAllGoodsSupport();
		await this.getAllBrand();
		if (this.flist.length > 0) {
			this.tabtap(this.flist[0], 1);
		}
	},
	methods: {
		getCollectionList() {
			this.loading_status = 'loading';
			this.isShow = false;
			this.$u.api.normalList().then(({ data }) => {
				uni.stopPullDownRefresh();
				this.loading_status = 'loadmore';
				if (data.length) {
					let shoppingList = [];
					data.forEach(item => {
						shoppingList = shoppingList.concat(item.data);
					});
					this.shoppingList = shoppingList;
				} else {
					this.shoppingList = [];
				}
			});
		},
		changeSearch(tag) {
			if (this.one_id === 'collection') {
				this.$u.toast('常购清单不支持筛选');
				return;
			}
			if (tag === 'zh') {
				this.brandId = [];
				this.sortt = '';
				this.support = [];
			} else if (tag === 'xl') {
				if (this.sortt === 2) {
					this.sortt = 1;
				} else {
					this.sortt = 2;
				}
			}
			this.page = 1;
			this.getGoodsByCategory();
		},
		// 选择品牌
		brandChange(id) {
			const index = this.brandId_zc.indexOf(id);
			if (index > -1) {
				this.brandId_zc.splice(index, 1);
			} else {
				this.brandId_zc.push(id);
			}
		},
		confirmBrand() {
			this.brandId = this.brandId_zc;
			this.page = 1;
			this.getGoodsByCategory();
			this.closeKey('show_brand');
		},
		// 选择服务
		supportChange(id) {
			const index = this.supplier_zc.indexOf(id);
			if (index > -1) {
				this.supplier_zc.splice(index, 1);
			} else {
				this.supplier_zc.push(id);
			}
		},
		resetBrand() {
			this.brandId = [];
			this.page = 1;
			this.getGoodsByCategory();
			this.closeKey('show_brand');
		},
		resetSupport() {
			this.support = [];
			this.page = 1;
			this.getGoodsByCategory();
			this.closeKey('show_support');
		},
		confirmSupport() {
			this.support = this.supplier_zc;
			this.page = 1;
			this.getGoodsByCategory();
			this.closeKey('show_support');
		},
		openKey(key) {
			if (key === 'show_support') {
				this.supplier_zc = this.$u.deepClone(this.support);
			} else {
				this.brandId_zc = this.$u.deepClone(this.brandId);
			}
			this[key] = true;
		},
		closeKey(key) {
			this[key] = false;
		},
		// 打开购物车
		cardModelPopChange(obj) {
			this.is_add_show = false;
		},
		// 加入购物车
		addCard(id) {
			this.goods_id = id;
			this.is_add_show = true;
		},
		changeThreeCate(show) {
			this.show_cate = show;
		},
		// 分类列表 getAllCategory
		getAllCategory() {
			this.$u.api
				.getAllCategory({
					userCenterId: this.userId || 0
				})
				.then(data => {
					this.flist = data.data;
					if (data.data.length) {
						this.tlist = data.data[0].children || [];
						this.currentId = data.data[0].id;
						this.one_id = data.data[0].id;
						// 二级菜单添加全部按钮
						if (this.tlist.length) {
							this.tlist.unshift({
								title: '全部',
								id: data.data[0].id,
								pid: 0
							});
						}
					}
					this.getGoodsByCategory();
				});
		},
		// 上拉加载
		lower(e) {
			if (this.one_id === 'collection') {
				this.loading_status = 'nomore';
				return;
			}
			if (this.pageTotal / this.pageSize > this.page) {
				this.page += 1;
				this.getGoodsByCategory();
			}
		},
		// 获取商品列表
		getGoodsByCategory() {
			this.loading_status = 'loading';
			this.isShow = false;
			this.$u.api
				.getGoodsByCategory({
					categoryId: this.three_id || this.currentId,
					page: this.page,
					pageSize: this.pageSize,
					brandId: this.brandId,
					sort: this.sortt,
					support: this.support
				})
				.then(data => {
					this.scroll_top_num = 1;
					const goods = data.data.map(item => {
						return {
							...item,
							isShow: false
						};
					});
					if (this.page === 1) {
						this.shoppingList = goods;
					} else {
						this.shoppingList = this.shoppingList.concat(goods);
					}
					this.pageTotal = data.pageTotal;
					this.loading_status = this.$_utils.loadStatus(this.page, this.pageSize, this.pageTotal);
				});
		},
		//一级分类点击
		tabtap(item, lever) {
			this.currentId = item.id;
			this.changeThreeCate(false);

			if (lever === 0) {
				// 点击常购清单
				this.one_id = 'collection';
				this.tlist = [];
				this.three_id = 0;
				this.three_cate = [];
				this.page = 1;
				this.shoppingList = [];
				this.getCollectionList();
				return;
			}

			if (lever === 1) {
				this.one_id = item.id;
				// 一级菜单
				this.cate_current = 0;
				const tlist = this.flist.find(cate => cate.id === item.id);
				this.tlist = tlist.children || [];
				// 二级菜单添加全部按钮
				if (this.tlist.length && !this.tlist.find(cate => cate.title === '全部')) {
					this.tlist.unshift({
						title: '全部',
						id: item.id
					});
				}
				this.three_id = 0;
				this.three_cate = [];
			} else if (lever === 2) {
				// 二级菜单
				this.two_cate = item.title;
				// 三级分类
				this.three_cate = item.children || [];
				// 三级分类添加全部按钮
				if (this.three_cate.length && !this.three_cate.find(cate => cate.title === '全部')) {
					this.three_cate.unshift({
						title: '全部',
						id: item.id
					});
				}
				this.three_id = item.id;
			}

			this.page = 1;
			this.shoppingList = [];
			this.$nextTick(() => {
				this.scroll_top_num = 0;
			});
			// 商品列表的切换
			this.getGoodsByCategory();
			// 品牌列表切换
			this.getAllBrand();
		},
		cateChange(index) {
			this.cate_current = index;
			// 商品列表的切换
			this.tabtap(this.tlist[index], 2);
		},
		threeCateChange(row) {
			this.three_id = row.id;
			this.tabtap(row, 3);
		},
		// 商品服务
		async getAllGoodsSupport() {
			await this.$u.api
				.getAllGoodsSupport({
					page: 1,
					pageSize: 100
				})
				.then(res => {
					this.support_list = res.data;
				});
		},
		// 商品品牌
		async getAllBrand() {
			await this.$u.api
				.getAllBrand({
					page: 1,
					pageSize: 999,
					categoryId: this.three_id || this.currentId
				})
				.then(res => {
					this.brand_list = res.data;
				});
		}
	}
};
</script>

<style lang="scss">
.tabs-view {
	border-bottom: 1px solid #eeeeee;
	font-weight: 510;
}
.main-cont {
	overflow: hidden;
	.float_left {
		height: 100%;
		.left-aside {
			width: 182upx;
			height: 100%;
			background-color: #f5f6f7;

			.f-item {
				-webkit-line-clamp: 1;
				width: 100%;
				height: 80upx;
				line-height: 80rpx;
				margin: 13rpx 0;
				text-align: center;
				font-size: 28upx;
				color: #4b4b4b;
				position: relative;
				&.active {
					color: #000000;
					font-weight: bold;
					background-color: #ffffff;
				}
				.active-line {
					position: absolute;
					left: 22rpx;
					top: 50%;
					transform: translateY(-50%);
					height: 24upx;
					width: 4upx;
					border-radius: 4rpx;
				}
			}
		}
	}
	.float_right {
		height: 100%;
		position: relative;
		.search-view {
			display: flex;
			font-size: 24rpx;
			text-align: center;
			line-height: 60rpx;
			border-bottom: 1px solid #eeeeee;
			.search-li {
				flex: 4;
				position: relative;
				.arrow-icon {
					/* #ifdef H5 */
					transform: scale(0.5, 0.5);
					/* #endif */
					position: absolute;
					right: 20rpx;
					color: #6c6c6c;
				}

				.arrow-down {
					top: 6rpx;
				}
				.arrow-up {
					bottom: 14rpx;
				}
			}
		}
		.cate-down-view {
			width: 100%;
			position: absolute;
			top: 0;
			left: 0;
			height: 100%;
			background-color: rgba(0, 0, 0, 0.5);
			z-index: 999;
			.head-view {
				line-height: 86rpx;
				font-size: 24rpx;
				color: #666666;
				background-color: #ffffff;
				padding: 0 24rpx;
			}
			.cate-cont {
				display: flex;
				flex-wrap: wrap;
				max-height: 420rpx;
				overflow: auto;
				background-color: #ffffff;
				.cate-li {
					text-align: center;
					display: inline-block;
					width: 150rpx;
					border: 1px solid #c6c6c6;
					height: 48rpx;
					line-height: 48rpx;
					font-size: 24rpx;
					margin-left: 24rpx;
					border-radius: 66rpx;
					margin-bottom: 20rpx;
					-webkit-line-clamp: 1;
				}
			}
		}
		.right-aside {
			position: relative;
			height: 100%;
			width: 568upx;
			overflow: hidden;
			background-color: #ffffff;
			.three-cate {
				position: relative;
				.three-cate-scroll {
					padding: 20rpx 0;
					width: 100%;
					white-space: nowrap;
					.cate-li {
						padding: 0 20rpx;
						display: inline-block;
						font-size: 20rpx;
						margin-left: 10rpx;
						border: 1px solid #c6c6c6;
						border-radius: 50rpx;
						height: 50rpx;
						line-height: 50rpx;
						&:last-child {
							margin-right: 60rpx;
						}
					}
				}
				.down-btn {
					position: absolute;
					background-color: #ffffff;
					width: 60rpx;
					text-align: center;
					right: 0;
					top: 0;
					height: 90rpx;
					line-height: 90rpx;
				}
			}
			.right-aside-scroll {
				height: 100%;
				.goods-li {
					border-bottom: 1px solid #f4f5f6;
				}
			}
			.nullSty {
				font-size: 26upx;
				text-align: center;
				vertical-align: middle;
				color: #999;
				position: absolute;
				top: 50%;
				left: 50%;
				transform: translate(-50%, -50%);
				image {
					width: 240upx;
					height: 160upx;
					margin-bottom: 30upx;
				}
			}
		}
	}
}
.search-pop {
	background-color: #ffffff;
	padding-bottom: 20rpx;
	.btn-ul {
		display: flex;
		padding-top: 20rpx;
		.btn-li {
			flex: 2;
			margin: 0 30rpx;
			border: 1px solid $uni-color-primary;
			border-radius: 8rpx;
			line-height: 50rpx;
			font-size: 24rpx;
			text-align: center;
		}
	}
}
</style>
